package com.situ.ymall.config;

import com.situ.ymall.service.PicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.Date;
import java.util.List;
/*
* Quartz
*
*  使用spring自带的定时任务
* */
@Component
@EnableScheduling // 这是一个定时任务的类，定义定时任务
public class CleanPicTask {

    @Value("${spring.servlet.multipart.location}")
    private String path;

    @Autowired
    private PicService picService;
    /**
     * 三级缓存 bean工厂
     * 二级中间对象
     * 一级缓存      一级缓存去取对象
     * quartz
     * 清理无用的图片
     */
    @Scheduled(cron = "0 52 14 * * ?") // 定义一个方法，作为定时任务
    // 设置一个表达式，指定在什么时间执行
    //  秒 分 时 日 月 周 年
    //  *
    //   0 0  1 *  *  ?
    //  */5 * * * *
    public void cleanPic(){
        System.out.println("定时清理图片");
        // 1. 要清理的图片在哪里
        File picDir = new File(path);
        File[] pics = picDir.listFiles();

        // 查询处所有的可用图片
        List<String> picList = picService.getAll();

        //遍历这些个图片，检查他们是不是需要清理
        for (File pic: pics ) {
            if (pic.isFile()){
                String picName = pic.getName();

                // 查询判断，该图片是否需要清理
                //图片在哪些地方被使用
                if ( ! picList.contains(picName)){
                    // 删除该文件
                    pic.delete();
                }
            }
        }
    }

    @Scheduled(fixedDelay = 24*60*60*1000)
    /*
        fixedDelay 设置定时任务的固定时间间隔
        单位是毫秒
        当项目启动后，第一次执行，每隔一段指定的时间间隔，就在次执行
     */
    public void test(){
        System.err.println("定时任务" + new Date());
    }
}
